$(function () {
    //定义全局变量
    window.pageSize = 5;
    window.pageNum = 1;
    window.keyword = "";
    //显示数据
    showPage();
});
function showPage() {
    $.ajax({
        url:"/role/search/by/keyword.json",
        type:"post",
        data:{
            "pageNum":window.pageNum,
            "pageSize":window.pageSize,
            "keyword":window.keyword
        },
        dataType:"json",
        success:function (result) {
            if(result.result=="SUCCESS"){
                //解析数据
                $("#roleTableBody").empty();
                // 获取数据集合
                var list = result.data.list;
                // 判断list是否有效
                if(list == null || list.length == 0) {
                    $("#roleTableBody")
                        .append("<tr><td colspan='4' style='text-align:center;'>没有查询到数据！</td></tr>");

                    return ;
                }
                for(var i = 0; i < list.length; i++) {
                    var role = list[i];

                    //数据
                    var numberTd = "<td>"+(i+1)+"</td>";
                    var checkBoxTd = "<td><input class='itemBox' roleid='"+role.id+"' type='checkbox'></td>";
                    var roleNameTd = "<td>"+role.name+"</td>";

                    //按钮
                    var checkBtn = "<button roleId='"+role.id+"' type='button' class='btn btn-success btn-xs checkBtn'><i class=' glyphicon glyphicon-check'></i></button>";
                   /* var pencilBtn = "<button type='button' class='btn btn-primary btn-xs'><i class=' glyphicon glyphicon-pencil'></i></button>";*/
                    var pencilBtn = "<button roleId='"+role.id+"' type='button' class='btn btn-primary btn-xs editBtn'>" +
                        "<i class=' glyphicon glyphicon-pencil'></i></button>";


                    var removeBtn = "<button roleId='"+role.id+"' type='button' class='btn btn-danger btn-xs removeBtn'>" +
                        "<i class=' glyphicon glyphicon-remove'></i></button>";

/*                    var removeBtn = "<button type='button' class='btn btn-danger btn-xs'><i class=' glyphicon glyphicon-remove'></i></button>";*/

                    var btnTd = "<td>"+checkBtn+" "+pencilBtn+" "+removeBtn+"</td>";

                    var tr = "<tr>"+numberTd+checkBoxTd+roleNameTd+btnTd+"</tr>";

                    // 将前面拼好的HTML代码追加到#roleTableBody中
                    $("#roleTableBody").append(tr);
                }

                //显示分页导航
                initPagination(result.data);
            }else{
                layer.msg(result.message);
            }
        }
    });
}

//声明函数封装导航条初始化操作
function initPagination(pageInfo) {

    // 声明变量存储分页导航条显示时的属性设置
    var paginationProperties = {
        num_edge_entries: 3,        //边缘页数
        num_display_entries: 5,      //主体页数
        callback: pageselectCallback, //回调函数
        items_per_page:window.pageSize,    //每页显示数据数量，就是pageSize
        current_page: (window.pageNum-1),//当前页页码
        prev_text: "上一页",       //上一页文本
        next_text: "下一页"        //下一页文本
    };
    // 显示分页导航条
    $("#Pagination").pagination(pageInfo.total, paginationProperties);
}

// 在每一次点击“上一页”、“下一页”、“页码”时执行这个函数跳转页面
function pageselectCallback(pageIndex, jq) {
    // pageIndex从0开始，pageNum从1开始
    window.pageNum = pageIndex + 1;
    // 跳转页面     然后在导航栏显示输入的查询信息
    showPage();
    return false;
}
//关键字查询
$("#searchBtn").click(function(){
    //获取输入框的数据
    var  keyword=$.trim($("#keywordInput").val());
    //验证输入数据是否有效
    if(keyword==null || keyword==''){
        //如果无效 则提示
        layer.msg("请输入关键字");
        return ;
    }
    //如果有效 赋值给keyword
    window.keyword=keyword;  //文本框赋值
    //重新显示 数据
    showPage();
})


//2．给#summaryBox绑定单击响应函数
//全选/全不选
$("#summaryBox").click(function(){
    //获取当前checked选中状态
    var currentStatus=this.checked;
    //2.设置选中状态
    $(".itemBox").prop("checked",currentStatus);
})

/*//4．检查itemBox是否被选中
$("#batchRemoveBtn").click(function(){
    //获取被选中的数组长度
    var length=$(".itemBox:checked").length;
    //如果为0  则 没选中
    if(length==0){
        layer.msg("请至少选择一条!")
        return ;
    }
})*/

//5．在弹出的模态框中显示confirm信息
$("#batchRemoveBtn").click(function () {
    // 获取被选中的itemBox数组长度
    var length = $(".itemBox:checked").length;

    // 如果长度为0，说明没有选择itemBox
    if(length == 0) {
        layer.msg("请至少选择一条！");
        return ;
    }

    // 在全局作用域内创建roleIdArray
    window.roleIdArray = new Array();

    // 遍历$(".itemBox:checked")
    $(".itemBox:checked").each(function(){

        // 通过checkbox的roleid属性获取roleId值
        var roleId = $(this).attr("roleid");
        // 存入数组
        window.roleIdArray.push(roleId);

    });
   /* alert(window.roleIdArray);*/

    // 调用函数打开模态框
    showRemoveConfirmModal();
});


//7．showRemoveConfirmModal()函数
function showRemoveConfirmModal() {
    // 1.将模态框显示出来
    $("#confirmModal").modal("show");

    //显示要删除的数据  使用 jaon格式
    var requestBody=JSON.stringify(window.roleIdArray);
    //2.发送ajax请求
    var ajaxResult=$.ajax({
        url:"/role/get/list/by/id/list",
        type:"post",
        //要显示的数据 从requestBody里面调用
        data:requestBody,
        contentType:"application/json;charset=UTF-8",
        dataType:"json",
        success:function(ajaxResult){
            if(ajaxResult.result=="SUCCESS"){
                //5.如果成功显示数据
                //清空 confirmModalTableBody
                $("#confirmModalTableBody").empty();
                //填充数据
                var roleList=ajaxResult.data;
                for(var i=0;roleList.length;i++){
                    //获取角色相关数据
                    var  role=roleList[i];

                    var  id=role.id;
                    var name=role.name;
                    var $tr="<tr><td>"+id+"</td><td>"+name+"</td><tr/>"

                    //追加
                    $("#confirmModalTableBody").append($tr);
                }
            }else{
                layer.msg(ajaxResult.message+"删除失败")
                return ;
            }
        }
    })
}

//绑定删除的单机事件
$("#confirmModalBtn").click(function(){
    //把追加的id转成json格式
    var requestBody = JSON.stringify(window.roleIdArray);

    $.ajax({
        url:"/role/batch/remove",
        type:"post",
        data:requestBody,
        contentType:"application/json;charset=UTF-8",
        dataType:"json",
        success:function(response){
            var result=response.result;
            if(result=="SUCCESS"){
                    layer.msg("删除成功!");
                    //如果删除成功  则重新调用showPage; 进行分页查询
                showPage();
            }else{
                layer.msg("删除失败"+response.message);
            }
            //不管成功还是失败 都要关闭模态框
            $("#confirmModal").modal("hide");
        },
    })
})

//单条删除  //卸载jquery里的 不能直接调用 需要调用它的父级 然后 .on  调用removeBtn
$("#roleTableBody").on("click",".removeBtn",function(){
    // 获取当前记录的roleId
    var roleId = $(this).attr("roleId");
    //加入全局变量数组
    window.roleIdArray=new Array();
    window.roleIdArray.push(roleId);
    //打开模态框 后续跟批量删除一样
    showRemoveConfirmModal();
})

//新增按钮的单机事件
$("#addBtn").click(function(){
    $("#addModal").modal("show");
});

//8．绑定单击响应函数
//确认增加
$("#addModalBtn").click(function(){
    //收集文本内容
    var roleName=$.trim($("#roleNameInput").val());
    if(roleName.length==0){
        layer.msg("请输入有效的角色名称!")
        return ;
    }
    //清理在文本框内填写的数据
    $("#roleNameInput").empty();

    $.ajax({
        url:"/role/save/role",
        type:"post",
        data:{
            "roleName":roleName
        },
        dataType:"json",
        success:function(ajaxResult){
            var result=ajaxResult.result;
            if(result="SUCCESS"){
                layer.msg("添加成功!");
                // 前往最后一页
                window.pageNum = 999999;
                showPage();

                }else{
                layer.msg("添加失败!");
            }
            //不管成功还是失败 都要关闭模态框
            $("#addModal").modal("hide");
        }
    })
})

//绑定修改的 响应单机事件
$("#roleTableBody").on("click",".editBtn",function(){
    //1.获取当前按钮的roleId
    window.roleId = $(this).attr("roleId");
    //2.获取当前按钮所在行的roleName
    var roleName=$(this).parents("tr").children("td:eq(2)").text();
    //修改模态框中文本框的value值,显示 roleName的值
    $("#roleNameInputEdit").val(roleName);
    //打开模态框
    $("#editModal").modal("show");
})


//确认修改
$("#editModalBtn").click(function () {
    // 1.获取文本框值
    var roleName = $.trim($("#roleNameInputEdit").val());

    if(roleName == null || roleName == "") {
        layer.msg("请输入有效角色名称！");

        return ;
    }
    $.ajax({
        url:"/role/update/role",
        type:"post",
        data:{
            "id":window.roleId,
            "name":roleName
        },
        dataType:"json",
        success:function (response) {
            var result = response.result;
            if(result == "SUCCESS") {
                layer.msg("操作成功！");
                // 3.操作成功重新分页
                showPage();
            }
            if(result == "FAILED") {
                layer.msg(response.message);
            }

            // 4.不管成功还是失败，关闭模态框
            $("#editModal").modal("hide");
        }
    });
});

$("#roleTableBody").on("click",".checkBtn",function () {
    window.roleId=$(this).attr("roleId");
    $("#roleAssignAuthModal").modal("show");
    //初始化ztree
    initWholeTree();
})
function initWholeTree() {
    var setting = {
        "data": {
            "simpleData": {
                "enable": true,
                "pIdKey": "categoryId"
            },
            "key": {
                "name": "title"
            }
        },
        "check": {
            "enable": true
        }
    };

    //获取json数据
    $.ajax({
        url:"/assign/get/all/auth",
        type:"post",
        dataType:"json",
        success:function (ajaxResult) {
            if(ajaxResult.result=="FAILED"){
            layer.msg(ajaxResult.message);
            reutrn;
            }
            var zNodes=ajaxResult.data;
            // 3.初始化树形结构
            $.fn.zTree.init($("#treeDemo"), setting, zNodes);
            //展开所有节点
            $.fn.zTree.getZTreeObj("treeDemo").expandAll(true);

            //回显已分配权限
            goBackAuth();
        }
    })
}

//回显以分配的权限
function goBackAuth() {
    $.ajax({
        url:"/assign/get/assigned/auth/id/list",
        type:"post",
        data:{
            "roleId":window.roleId,
            "random":Math.random()
        },
        dataType:"json",
        success:function (ajaxResult) {
            if(ajaxResult.result == "FAILED") {
                layer.msg(ajaxResult.message);
                return ;
            }
            var authIdList=ajaxResult.data;
        for(var i=0;i<authIdList.length;i++){
            var authId=authIdList[i];


            // ③根据authId查询到一个具体的树形节点
            // key：查询节点的属性名
            // value：查询节点的属性值，这里使用authId

            var treeNode = $.fn.zTree.getZTreeObj("treeDemo").getNodeByParam("id", authId);

            // ④勾选找到的节点
            // treeNode：当前要勾选的节点
            // true：表示设置为勾选状态
            // false：表示不联动
            $.fn.zTree.getZTreeObj("treeDemo").checkNode(treeNode, true, false);

        }
        }
    })
}

/*
//4.6执行分配
$("#roleAssignAuthBtn").click(function () {
    var authIdArray=new Array();
    // 调用zTreeObj的方法获取当前已经被勾选的节点
    var checkedNodes=$.fn.zTree.getZTreeObj("treeDemo").getCheckedNodes();

    for(var i=0;i<checkedNodes.length;i++){
        //获取一个具体的节点
        var node=checkedNodes[i];
        var authId=node.id;
        authIdArray.push(authId);
    }
var requestBody={"roleIdlist":[window.roleId],"authIdList":authIdArray};

    $.ajax({
        "url": "/assign/do/assign",
        "type": "post",
        "data": JSON.stringify(requestBody),
        "contentType": "application/json;charset=UTF-8",
        "dataType": "json",
        success:function (ajaxResult) {
            if(ajaxResult.result == "SUCCESS") {
                layer.msg("操作成功！");
            }

            if(ajaxResult.result == "FAILED") {
                layer.msg(ajaxResult.message);
            }
            $("#roleAssignAuthModal").modal("hide");
        }
    });
})
*/

$("#roleAssignAuthBtn").click(function () {
    var authIdArray = new Array();
    // 调用zTreeObj的方法获取当前已经被勾选的节点
    var checkedNodes=$.fn.zTree.getZTreeObj("treeDemo").getCheckedNodes();

    for(var i = 0; i < checkedNodes.length; i++) {
        // 获取具体的一个节点
        var node = checkedNodes[i];
        // 获取当前节点的id属性
        var authId = node.id;
        // 将authId存入数组
        authIdArray.push(authId);
    }
    var requestBody = {"roleIdList":[window.roleId], "authIdList": authIdArray};
// 发送请求
    $.ajax({
        "url": "/assign/do/assign",
        "type": "post",
        "data": JSON.stringify(requestBody),
        "contentType": "application/json;charset=UTF-8",
        "dataType": "json",
        success:function (ajaxResult) {
            if(ajaxResult.result == "SUCCESS") {
                layer.msg("操作成功！");
            }

            if(ajaxResult.result == "FAILED") {
                layer.msg(ajaxResult.message);
            }
            $("#roleAssignAuthModal").modal("hide");
        }
    });
});


